Optimize GameObjects
打开这个选项后, 我们可以发现, MeshSkinning.Update 函数的耗时几乎可以忽略不计
- Animators.Update
- 打开之后,对 DirtySceneObjects 函数有10倍的影响
- 看到这张图就非常清晰了, 打开之后,之前骨骼的层级结构被优化了,这样会导致场景需要花更少的时间去更新子节点的Transform
- MeshSkinning.Update
- 打开之后,对CalcMatrices 函数有几百倍的影响,几乎消失了
- 这里 Unity 实现的逻辑是,把 CalcMatrices 函数丢到 Work Thread 中,这样主线程的开销就非常非常小了
同时开启 Multithread Rendering & Optimize GameObjects
当我们同时打开两个选项时,会发现对性能的提升并不是很大,这个现象很奇怪
这个时候主线程会多一个 Gfx.WaitforPresent,来等待渲染线程,这时的瓶颈在渲染线程中
结论
- 不开启 Multithread Rendering 时, 测试中 FPS 优化更明显
- 随着角色数目增多,瓶颈出现在 Render 时,减少主线程耗时对 FPS 提高不明显 (Gfx.WaitForPresent)
但是减少主线程的压力意义还是很重大的,可以将更多的时间丢给逻辑处理部分